package dper.study.codes.concurrent.api;

/**
 * Created by leichen on 2017/3/20.
 * tutorial see http://wiki.jikexueyuan.com/project/java-concurrency
 */
public interface JKXYConcurrentTutorialAPI {
    /**
     * http://wiki.jikexueyuan.com/project/java-concurrency/function.html
     * http://wiki.jikexueyuan.com/project/java-concurrency/volatile1.html
     * @return
     */
    int simpleMultiThread() ;

    /**
     * http://wiki.jikexueyuan.com/project/java-concurrency/collaboration-between-threads.html
     */
    int simpleWaitNotify() ;

    /**
     * http://wiki.jikexueyuan.com/project/java-concurrency/lock.html
     * @return
     */
    int simpleReentrantLockAndCondition();

    /**
     * http://wiki.jikexueyuan.com/project/java-concurrency/queue-stack.html
     * @return
     */
    int simpleBlockingQueue() ;

    /**
     * http://wiki.jikexueyuan.com/project/java-concurrency/semaphore.html
     * Java 并发包中的信号量 Semaphore 实际上是一个功能完毕的计数信号量，我们完全可以通过使用信号量来自定义实现类似 Java 中的 synchronized、wait、notify 机制。
     * 从概念上讲，它维护了一个许可集合，对控制一定资源的消费与回收有着很重要的意义。
     * Semaphore 可以控制某个资源被同时访问的任务数，它通过acquire()获取一个许可，release()释放一个许可。
     * 如果被同时访问的任务数已满，则其他 acquire 的任务进入等待状态，直到有一个任务被 release 掉，它才能得到许可。
     * @return
     */
    int simpleSemaphore() ;
}
